// 2018版权所有etcd作者
// 
// 根据Apache许可证2.0版（以下简称“许可证”）获得许可；
// 除非遵守许可证，否则不得使用此文件。
// 您可以通过
// 
// www.apache.org/licenses/LICENSE-2.0 
// 
// 除非适用法律要求或书面同意，否则根据许可证分发的软件
// 按“原样”分发，
// 无任何明示或暗示的保证或条件。
// 请参阅许可证，了解管理许可的特定语言和
// 许可证下的限制。

// 版权所有2015 Go作者。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可在许可证文件中找到。

// 包httputil提供HTTP实用程序函数。
package httputil

import (
	"io"
	"net"
	"net/http"
)

// 优雅关闭http。回答直到碰到
// 的EOF并将其关闭。这将防止TCP/TLS连接关闭，
// 因此可供重用。
// 借用自golang/net/context/ctxhttp/cancelreq。去
func GracefulClose(resp *http.Response) {
	io.Copy(io.Discard, resp.Body)
	resp.Body.Close()
}

// GetHostname从请求主机字段返回主机名。
// 如果主机字段包含无效的
// 值（例如冒号过多的“localhost:：”），则返回空字符串。
func GetHostname(req *http.Request) string {
	if req == nil {
		return ""
	}
	h, _, err := net.SplitHostPort(req.Host)
	if err != nil {
		return req.Host
	}
	return h
}
